#!/usr/bin/python
#coding:utf-8
'''
matplotlibmodel 实例类
'''
import matplotlib.pyplot as plt
import matplotlib.image as mpimg # mpimg 用于读取图片

from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] #支持中文
import numpy  as np

def showImg(imgOne,imgTwo,titleContext):
    '''
    imgOne：第一张图片
    imgTwo：第二张图片
    titleContext：标题内容
    
    多张图片同时显示
    '''
    fig = plt.figure(figsize=(16, 9)) #1600*900
    ax1 = fig.add_subplot(121)  #两张图片,4张改121为221，第一位行数，第二位列数，第三位图片数
    lena = mpimg.imread(imgOne)
    lena.shape #(512, 512, 3)
    ax1.imshow(lena) # 显示图片
    ax1.axis('off')

    ax2 = fig.add_subplot(122)
    lena2 = mpimg.imread(imgTwo)
    lena2.shape #(512, 512, 3)
    ax2.imshow(lena2)    
    ax2.axis('off')

    plt.title(titleContext)
    plt.show()


def showLine():
    '''
    折线图显示
    '''
    time=[10,11,12,13,14]
    really=[100,110,210,300,220]
    forecast=[90,120,180,250,280]

    x=np.array(time)
    plt.plot(x, np.array(really),c='g',label="really")
    plt.plot(x, np.array(forecast),c='r',label="forecast")
    plt.xticks(rotation=45)  #旋转x轴刻度
    plt.title('标题')
    plt.xlabel('time')
    plt.ylabel("value")
    plt.legend(loc='upper left')
    plt.vlines(12,0,300, colors = "c", linestyles = "dashed")  #画竖线分隔
    plt.show()


def showLabels():
    '''
    堆积图
    '''
    feature_name=['apple','orange','Banana','Strawberry']   #特征名
    labelsDict=[[1,2,4,3],[5,9,7,3],[12,7,20,1],[17,10,7,9]]  #列数值 二维数组，第二维对应各个体征数目
    
    x=np.arange(len(feature_name))
    width=0.5
    fig,ax=plt.subplots(figsize=(16, 9))
    c1="#99CCFF"
    c2="#CCFFFF"
    c3="#6699CC"
    value=0
    for i in range(len(labelsDict)):
        if i==0:
            ax.bar(x,labelsDict[i],width,color=c1,edgecolor='r')
            value=np.array(labelsDict[i])
        else:
            if i % 2 == 0:   
                ax.bar(x,labelsDict[i],width,value,color=c2,edgecolor='g')
                value=value+np.array(labelsDict[i])
            elif i%3==0:
                ax.bar(x,labelsDict[i],width,value,color=c3,edgecolor='b')
                value=value+np.array(labelsDict[i])
            else:
                ax.bar(x,labelsDict[i],width,value,color=c1,edgecolor='r')
                value=value+np.array(labelsDict[i])

    ax.set_xticks(x)
    ax.set_xticklabels(feature_name)
    plt.show()

def zhu():
    '''
    柱状图
    '''
    lab=[10,12,15]
    sizes=[100,120,150]
    plt.bar(range(len(sizes)),sizes,color='rgb',tick_label=lab) #第一个横坐标值列表 第二个纵坐标值列表 color设置条柱颜色 tick_label设置标签
    # 设置数量
    for xx,yy in zip(lab,sizes):  #填写内容
        plt.text(xx, yy+0.1, str(yy), ha='center')  #前两位坐标，第三位名字，第四位文本显示格式
    plt.show();

def bing():
    '''
    饼状图
    '''
    explode=[0.1,0,0]
    labelsString=["one","two","three"]
    sizes=[100,120,150]
    fig1, ax1 = plt.subplots()
    '''
    labeldistance：文本的位置距离原点有多远，1.1值1.1被半径
    autopct:圆内文本格式，%3.1f%表示小数有三位，整数有一位的浮点数
    shadow:饼是否有阴影
    startangle,起始角度，0表示从0开始逆时针旋转为第一块，一般选择从90度开始比较好看
    pctdistance:百分比的text离圆心的距离
    patches,1_text,p_text,为了得到饼图返回值，p_texts饼图内部文件的，1_testx饼图外label的文本
    '''
    ax1.pie(sizes, explode=explode, labels=labelsString, autopct='%1.1f%%',shadow=True, startangle=90)
    ax1.axis('equal') 
    plt.show()

showLine()